您好,欢迎来到达州工业云! 平台首页 企业驾驶舱 帮助中心 企业登录 企业注册

HI,欢迎使用达州工业云平台!

账号必须大于2位

创新资源平台
服务平台首页>专利库>专利详情

一种按字长匹配的多模式串匹配方法

  • 申请号:CN201210006598.6 申请公布号: CN102609450B
  • 申请日: 2012-01-10 申请公布日: 2014-07-23
  • 申请(专利权)人: 专利代理机构: 安徽省合肥新安专利代理有限责任公司
  • 分类号:G06F17/30

专利介绍

本发明公开了一种按字长匹配的多模式匹配方法,包括预编译过程和搜索过程,预编译过程构造3个表:跳转表即SHIFT表、哈希表即HASH表和前缀表即PREFIX表;特征是在搜索过程中按字长读取文本,每次从文本中装载一个整型值,每次读入和处理的单位变为一个机器字,这样就平滑了在最短模式串长度过小时跳跃距离过小的劣势,同时整型值中包含的三个字符块的哈希值可以通过对该整型值的移位获得,不需要进行逐个取值和做或运算,从而加快了哈希值的计算速度;每次读取一个机器字也使访存次数有效减少,提高了访存效率。采用本发明方法可使多模式串的匹配达到比较高的效率。
1.一种按字长匹配的多模式串匹配方法,包括预编译过程和搜索过程,在字长为32位的计算机上进行如下操作:所述预编译过程为构造3个表:一个跳转表即SHIFT表,一个哈希表即HASH表,一个前缀表即PREFIX表;设B为字符块的长度,m为最短模式串的长度,X为当前需要计算哈希值的字符块;字符块哈希值的计算公式为:hash(X)=(X[0]*256B-1)+(X[1]*256B-2)+...+(X[B-1]*2560);首先建立SHIFT表:先建立一个空表,表项值都初始化为最大跳转距离m-B+1,在模式集中取每个模式串前m个字符,从后往前每次取相邻B个字符组成字符块,按上面给出的字符块哈希值的计算公式计算该字符块的哈希值,按字符块跳转值的计算公式ntent="drawing" img-format="tif" inline="yes" orientation="portrait" wi="700"/>修改表中索引值为该字符块哈希值的表项值,即形成SHIFT表;然后建立HASH表:先建立一个空表,表项值都初始化为空,在模式集中取每个模式串前m个字符的后B个字符组成字符块,按字符块哈希值的计算公式计算该字符块的哈希值,把哈希值相等的模式串用链表链接起来,存储在表中对应索引值为该哈希值的表项中,即形成HASH表;再建立PREFIX表:先建立一个空表,表项值初始化为空,取模式集中每个模式串前B个字符,把哈希值相等的模式串用链表链接起来,存储在表中对应索引值为该哈希值的表项中,即形成PREFIX表;其特征在于:将所述需要计算哈希值的字符块的长度B取2,在搜索过程中,每次按字长读取文本,即每次从文本中装载一个整型值,字符块的哈希值通过对该整型值的移位得到;具体操作如下:设当前读取机器字的内容是对应文本中的字符“abcd”,其中“abcd”四个字符均泛指任意字符,则该机器字对应三个字符块:前面字符块“ab”、中间字符块“bc”和后面字符块“cd”,机器字对应整型值为变量var,整个搜索过程分为四个阶段,用计算机语言描述如下:第一阶段:由计算前面字符块哈希值的公式hash("ab")=(var<<16)>>16得到前面字符块的哈希值V1,查SHIFT表得到表中索引值为前面字符块的哈希值V1的表项值:switch(SHIFT[V1]){case0:查找HASH表中索引值为前面字符块的哈希值V1的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V1的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第二阶段;case1:直接进入第二阶段;case2,3,4:直接进入第三阶段;default:若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;};第二阶段:由计算中间字符块哈希值的公式hash("bc")=(var<<8)>>16得到中间字符块的哈希值V2,查SHIFT表:switch(SHIFT[V2]){case0:查找HASH表中索引值为中间字符块的哈希值V2的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V2的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第三阶段;case1,2:直接进入第三阶段;default:若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;};第三阶段:由计算后面字符块哈希值的公式hash("cd")=var>>16得到后面字符块的哈希值V3,查SHIFT表:switch(SHIFT[V3]){case0:查找HASH表中索引值为后面字符块的哈希值V3的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V3的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第四阶段;case1:直接进入第一阶段;default:若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;};第四阶段:取下一个字长中与该字长中相邻的字符,由计算哈希值的公式计算得到相邻字长字符块的哈希值V4,查SHIFT表:switch(SHIFT[V4]){case0:查找HASH表中索引值为字长字符块的哈希值V4的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V4的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第四阶段;default:若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;}。技术领域
本发明属于计算机中字符串匹配技术领域,具体涉及按字长匹配的多模式串匹配方法。
背景技术
多模式串匹配方法现已被广泛的用于信息检索、网络内容过滤、病毒检测和生物计算学等方面。所谓多模式串匹配,就是从文本中搜索出模式串集合中所有模式串的所有出现的位置。经典的多模式匹配方法有基于前缀的匹配防范,基于后缀的匹配方法和基于子串的匹配方法。其中基于后缀的匹配方法,如1994年美国亚利桑那大学计算机学院报告《一种快速的多模式串匹配算法》中提出的Wu-Manber方法(报告编号为TR-94-17),是目前实际中平均性能最好的一个方法,被应用于操作系统的搜索程序和入侵检测系统中。该Wu-Manber方法采用哈希散列和跳跃式搜索的方式,具有很好的匹配效率,但Wu-Manber方法在模式集中最短模式串长度过小时,搜索时平均跳跃距离变小,需要频繁的计算哈希值,验证入口增多,匹配效率会严重下降。
发明内容
本发明提出一种按字长匹配的多模式串匹配方法,以克服现有技术的上述缺陷,使多模式串匹配达到比较高的效率。本发明按字长匹配的多模式串匹配方法,包括预编译过程和搜索过程,在字长为32位的计算机上进行如下操作:所述预编译过程和传统的Wu-Manber方法相同,为构造3个表:一个跳转表即SHIFT表,一个哈希表即HASH表,一个前缀表即PREFIX表;设B为字符块的长度,m为最短模式串的长度,X为当前需要计算哈希值的字符块;字符块哈希值的计算公式为:hash(X)=(X[0]*256B-1)+(X[1]*256B-2)+...+(X[B-1]*2560);首先建立SHIFT表:先建立一个空表,表项值都初始化为最大跳转距离m-B+1,在模式集中取每个模式串前m个字符,从后往前每次取相邻B个字符组成字符块,按上面给出的字符块哈希值的计算公式计算该字符块的哈希值,按字符块跳转值的计算公式ntent="drawing" img-format="tif" inline="yes" orientation="portrait" wi="700"/>修改表中索引值为该字符块哈希值的表项值,即形成SHIFT表;然后建立HASH表:先建立一个空表,表项值都初始化为空,在模式集中取每个模式串前m个字符的后B个字符组成字符块,按字符块哈希值的计算公式计算该字符块的哈希值,把哈希值相等的模式串用链表链接起来,存储在表中对应索引值为该哈希值的表项中,即形成HASH表;再建立PREFIX表:先建立一个空表,表项值初始化为空,取模式集中每个模式串前B个字符,把哈希值相等的模式串用链表链接起来,存储在表中对应索引值为该哈希值的表项中,即形成PREFIX表;其特征在于:将所述需要计算哈希值的字符块的长度B取2,在搜索过程中,每次按字长读取文本,即每次从文本中装载一个整型值,字符块的哈希值通过对该整型值的移位得到;具体操作如下:设当前读取机器字的内容是对应文本中的字符“abcd”,其中“abcd”四个字符均泛指任意字符,则该机器字对应三个字符块:前面字符块“ab”、中间字符块“bc”和后面字符块“cd”,机器字对应整型值为变量var,整个搜索过程分为四个阶段,用计算机语言描述如下:第一阶段:由计算前面字符块哈希值的公式hash("ab")=(var<<16)>>16得到前面字符块的哈希值V1,查SHIFT表得到表中索引值为前面字符块的哈希值V1的表项值:switch(SHIFT[V1]){case0:查找HASH表中索引值为前面字符块的哈希值V1的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V1的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第二阶段;case1:直接进入第二阶段;case2,3,4:直接进入第三阶段;default:若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;};第二阶段:由计算中间字符块哈希值的公式hash("bc")=(var<<8)>>16得到中间字符块的哈希值V2,查SHIFT表:switch(SHIFT[V2]){case0:查找HASH表中索引值为中间字符块的哈希值V2的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V2的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第三阶段;case1,2:直接进入第三阶段;default:若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;};第三阶段:由计算后面字符块哈希值的公式hash("cd")=var>>16得到后面字符块的哈希值V3,查SHIFT表:switch(SHIFT[V3]){case0:查找HASH表中索引值为后面字符块的哈希值V3的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V3的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第四阶段;case1:直接进入第一阶段;default:若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;};第四阶段:取下一个字长中与该字长中相邻的字符,由计算哈希值的公式计算得到相邻字长字符块的哈希值V4,查SHIFT表:switch(SHIFT[V4]){case0:查找HASH表中索引值为字长字符块的哈希值V4的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V4的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第四阶段;default:若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;}。概括起来说,本发明方法就是在上述搜索过程中首先计算当前字符块的哈希值,若当前字符块的跳转值为零,则将当前整型指针转为字符指针,查找HASH表和PREFIX表,验证可能的匹配情况,若不为零,则直接移动到下一个匹配入口;整个过程中搜索指针的移动距离是一个字长的整数倍,当搜索指针到达文本末尾,整个过程结束。与现有Wu-Manber技术相比,本发明主要做了以下改进:A.最短模式串长度过小时,平均跳跃距离增大。本发明方法中的最大跳跃距离为m-B+1;而在现有的Wu-Manber方法中当规则集中最短模式串长度过小时,最大跳跃距离受限;本发明方法中通过按字长匹配,每次读入和处理的单位变为一个机器字,在最短模式串长度过小时,仍相当于跳跃距离为4,这样就平滑了最短模式串长度过小时跳跃距离过小的劣势。B.哈希值的计算加速。本发明中每次读入一个整型值,其包含的三个字符块的哈希值正好可以通过对该整型值的移位获得。仅仅通过移位即可获得所需的哈希值,而不需要进行逐个取值和做或运算,这样就加快了哈希值的计算速度,特别是当最短模式串长度过小而需要频繁对文本计算哈希值时,采用本发明方法就可获得很大的效率提升。C.访存次数减少。本发明中每次读取一个机器字,设文本长度为n,则最多的访存次数为n/4;而现有的Wu-Manber方法的平均访存次数为n/(m-1),当最短模式串长度过小时,现有的Wu-Manber方法的访存次数很多,而采用本发明方法后访存次数可以有效减少。
具体实施方式
实施例1:本发明提出的这种按字长匹配的多模式串匹配方法,分为预编译过程和搜索过程,其中的预编译过程和传统的Wu-Manber方法相同,即建立三个表:SHIFT表,HASH表和PREFIX表;在搜索过程中,每次匹配的单位为一个字长,即一个整型,通过对该整型进行移位操作,可以快速得到整型中包含的三个字符块的哈希值,再根据预编译过程得到的三个表,进行匹配验证。本实施例中的实现平台为linux操作系统,字长为32位,中央处理器为双核酷睿2代,内存为2千兆字节,采用的是随机生成的9.54兆字节的匹配文本,字符集大小为256,模式串集合是从匹配文本中随机抽取的子串,模式串集合大小为100,集合中模式串长度差异不超过10,最短模式串的长度m从2到10之间变化。本实施例按字长匹配的多模式串匹配方法的具体操作如下:在预编译过程中构造3个表:一个跳转表即SHIFT表,一个哈希表即HASH表,一个前缀表即PREFIX表;设B为字符块的长度,m为最短模式串的长度,X当前需要计算哈希值的字符块;字符块哈希值的计算公式为:hash(X)=(X[0]*256)+X[1];首先是建立SHIFT表:先建立一个空表,表项值都初始化为最大跳转距离m-B+1,在模式集中取每个模式串前m个字符,从后往前每次取相邻B个字符组成字符块,按字符块哈希值的计算公式计算该字符块的哈希值,按字符块跳转值的计算公式ntent="drawing" img-format="tif" inline="yes" orientation="portrait" wi="700"/>修改表中索引值为该字符块哈希值的表项值,即形成SHIFT表;然后建立HASH表:先建立一个空表,表项值都初始化为空,在模式集中取每个模式串前m个字符的后B个字符组成字符块,按字符块哈希值的计算公式计算该字符块的哈希值,把哈希值相等的模式串用链表链接起来,存储在表中对应索引值为该哈希值的表项中,即形成HASH表;再建立PREFIX表:先建立一个空表,表项值初始化为空,取模式集中每个模式串前B个字符,把哈希值相等的模式串用链表链接起来,存储在表中对应索引值为该哈希值的表项中,即形成PREFIX表;将所述需要计算哈希值的字符块长度B取2,在搜索过程中,每次按字长读取文本,即每次从文本中装载一个整型值,字符块的哈希值通过对该整型值的移位得到;具体操作如下:设当前读取机器字的内容是对应文本中的字符“abcd”,其中“abcd”四个字符均泛指任意字符,则该机器字对应三个字符块:前面字符块“ab”、中间字符块“bc”和后面字符块“cd”,机器字对应整型值为变量var,整个搜索过程分为四个阶段,用计算机语言描述如下:第一阶段:由计算前面字符块哈希值的公式hash("ab")=(var<<16)>>16得到前面字符块的哈希值V1,查SHIFT表得到表中索引值为前面字符块的哈希值V1的表项值:switch(SHIFT[V1]){case0:查找HASH表中索引值为前面字符块的哈希值V1的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V1的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第二阶段;case1:直接进入第二阶段;case2,3,4:直接进入第三阶段;default:若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;};第二阶段:由计算中间字符块哈希值的公式hash("bc")=(var<<8)>>16得到中间字符块的哈希值V2,查SHIFT表:switch(SHIFT[V2]){case0:查找HASH表中索引值为中间字符块的哈希值V2的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V2的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第三阶段;case1,2:直接进入第三阶段;default:若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;};第三阶段:由计算后面字符块哈希值的公式hash("cd")=var>>16得到后面字符块的哈希值V3,查SHIFT表:switch(SHIFT[V3]){case0:查找HASH表中索引值为后面字符块的哈希值V3的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V3的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第四阶段;case1:直接进入第一阶段;default:若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;};第四阶段:取下一个字长中与该字长中相邻的字符,由计算哈希值的公式计算得到相邻字长字符块的哈希值V4,查SHIFT表:switch(SHIFT[V4]){case0:查找HASH表中索引值为字长字符块的哈希值V4的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V4的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第四阶段;default:若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;}。本实施例中,每次匹配的单位为一个机器字,在机器字长为32位的计算机上操作,每次相当于跳跃了4个字节,这样就平滑了最短模式串长度过小时跳跃距离过小的劣势。通过按字长读取,使搜索过程所需的哈希值的计算加速,本发明根据机器中整型值存储的特点,设计合理的哈希函数,每次读入一个整型值,其包含的三个字符块的哈希值正好可以通过对该整型值的移位获得。本发明中仅仅通过移位即可获得所需的哈希值,而不需要进行逐个取值和做或运算,这样就加快了计算速度,特别是当最短模式串长度过小,需要频繁对文本计算哈希值时,采用本发明方法获得了很大效率提升,同时在访存效率上也获得了很大提高。本发明在搜索过程中每次读取一个字长的信息,而传统的方法需要访存4次才能获得,特别是在最短模式串长度过小时,由于跳跃距离小,传统的方法需要多次读取文本验证,访存频繁;而采用本发明方法的访存开销仅为现有方法的四分之一,获得了很大的效率提升。综合以上几点,本实施例中在跳跃距离、哈希值的计算和访存上都获得了优化,匹配效率得到提高。性能及效果分析综合使用本发明的上述优化技术以后,通过实验测试分析证实,本发明正确实现了多模式串匹配功能,匹配效率相对于现有的Wu-Manber方法平均提高了40%,在最短模式串长度为2和3时,匹配效率提高了60%以上。与现有Wu-Manber技术相比,本发明主要做了以下改进:A.最短模式串长度过小时,平均跳跃距离增大。本发明方法中的最大跳跃距离为m-B+1;而在现有的Wu-Manber方法中当规则集中最短模式串长度过小时,最大跳跃距离受限,如当最短模式串长度为2时,最大跳跃距离为1;本发明方法通过按字长匹配方法,每次读入和处理的单位变为一个机器字,在最短模式串长度过小时,仍相当于跳跃距离为4,这样就平滑了最短模式串长度过小时跳跃距离过小的劣势。B.哈希值的计算加速。本发明中每次读入一个整型值,其包含的三个字符块的哈希值正好可以通过对该整型值的移位获得。仅仅通过移位即可获得所需的哈希值,而不需要进行逐个取值和做或运算,这样就加快了哈希值的计算速度,特别是当最短模式串长度过小而需要频繁对文本计算哈希值时,采用本发明方法就可获得很大的效率提升。C.访存次数减少。本发明中每次读取一个机器字,设文本长度为n,则最多的访存次数为n/4;而现有的Wu-Manber方法的平均访存次数为n/(m-1),当最短模式串长度过小时,现有的Wu-Manber方法的访存次数很多,如当m=2时,访存次数几乎是n。可见采用本发明方法后访存次数可以有效减少。